home *** CD-ROM | disk | FTP | other *** search
/ Aminet 35 / Aminet 35 (2000)(Schatztruhe)[!][Feb 2000].iso / Aminet / dev / src / td01_src.lha / td_r0.1 / source / td_private.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-06-20  |  11.0 KB  |  438 lines

  1. /*
  2. **      $VER: td_private.h 0.1 (20.6.99)
  3. **
  4. **      Creation date     : 11.4.1999
  5. **
  6. **      Description       :
  7. **         Private type definitions and constants for the td library.
  8. **
  9. **      Written by Stephan Bielmann
  10. **
  11. **
  12. */
  13.  
  14. #ifndef INCLUDE_TD_PRIVATE_H
  15. #define INCLUDE_TD_PRIVATE_H
  16.  
  17. /********************************************************************/
  18.  
  19. #include "td_public.h"
  20.  
  21. /**************************** Defines *******************************/
  22.  
  23. // Material arrays
  24. #define Ci_MATBLOCKS        100
  25. #define Ci_MATNODESINBLOCK    100
  26.  
  27. // Object arrays
  28. #define Ci_OBJECTBLOCKS        100
  29. #define Ci_OBJECTNODESINBLOCK    100
  30.  
  31. // matgroup arrays
  32. #define Ci_MATGROUPBLOCKS            200
  33. #define Ci_MATGROUPNODESINBLOCK    100
  34.  
  35. // vertex arrays
  36. #define Ci_VERTEXBLOCKS        100
  37. #define Ci_VERTEXARRAYINBLOCK    100
  38. #define Ci_VERTEXARRAY            100
  39.  
  40. // polygon arrays
  41. #define Ci_POLYBLOCKS            100
  42. #define Ci_POLYARRAYINBLOCK    100
  43. #define Ci_POLYARRAY            100
  44.  
  45. // Initial size of a polygon its vertex array
  46. #define Ci_POLYVERARRAYINIT 3
  47. #define Ci_POLYVERARRAYINITQ 4
  48.  
  49. /***************************** Types ********************************/
  50.  
  51. /*
  52. ** Color structure
  53. */
  54. typedef struct {
  55.     UBYTE r,g,b;
  56. }TTDOColorub;
  57.  
  58. /*
  59. ** Camera structure
  60. */
  61. typedef struct {
  62.     TTDOVertexd    position,lookat;
  63. }TTDOCamera;
  64.  
  65. /*
  66. ** Light source structure
  67. */
  68. typedef struct {
  69.     TTDOVertexd    position;
  70.     TTDOColorub    color;
  71. }TTDOLight;
  72.  
  73. /*
  74. ** Vertex array structure
  75. */
  76. typedef struct {
  77.     TTDOVertexd *varray[Ci_VERTEXARRAY];    /* Array of vertices */
  78. }TTDOVertexArray;
  79.  
  80. /*
  81. ** Vertex block structure
  82. */
  83. typedef struct {
  84.     TTDOVertexArray *barray[Ci_VERTEXARRAYINBLOCK];    /* Arrays of vertex arrays */
  85. }TTDOVertexBlock;
  86.  
  87. /*
  88. ** Vertex list structure
  89. */
  90. typedef struct {
  91.     ULONG                numberOfVertices;            /* Number of vertices in this list    */
  92.     TTDOVertexBlock    *blocks[Ci_VERTEXBLOCKS];    /* Array of vertex blocks.                */
  93. } TTDOVertexList;
  94.  
  95. /*
  96. ** Polygon node structure
  97. */
  98. typedef struct TTDOPolygonNode {
  99.     ULONG numberOfVertices;        /* Number of vertices in this polygon */
  100.  
  101.     ULONG                *varray;    /* Vertex handle array */
  102. } TTDOPolygonNode;
  103.  
  104. /*
  105. ** Polygon array structure
  106. */
  107. typedef struct {
  108.     TTDOPolygonNode *parray[Ci_POLYARRAY];    /* Array of polygons */
  109. }TTDOPolygonArray;
  110.  
  111. /*
  112. ** Polygon block structure
  113. */
  114. typedef struct {
  115.     TTDOPolygonArray *barray[Ci_POLYARRAYINBLOCK];    /* Arrays of polygon arrays */
  116. }TTDOPolygonBlock;
  117.  
  118. /*
  119. ** Polygon list structure
  120. */
  121. typedef struct {
  122.     ULONG                numberOfVertices;        /* Number of vertices in this list    */
  123.     ULONG                numberOfPolygons;        /* Number of polygons in this list    */
  124.     TTDOPolygonBlock *blocks[Ci_POLYBLOCKS];    /* Array of polygon blocks.            */
  125. } TTDOPolygonList;
  126.  
  127. /*
  128. ** Material node structure, the real material
  129. */
  130. typedef struct {
  131.     STRPTR name;                        /* The material its name                     */
  132.     
  133.     TTDOColorub ambientColor;            /* The material its ambient color */
  134.     TTDOColorub diffuseColor;            /* The material its diffuse color */
  135.     TTDOFloat   shininess;                /* The material its shininess     */
  136.     TTDOFloat   transparency;            /* The material its transparency  */
  137. }TTDOMaterialNode;
  138.  
  139. /*
  140. ** Material block structure
  141. */
  142. typedef struct {
  143.     TTDOMaterialNode *nodes[Ci_MATNODESINBLOCK];    /* Array of material nodes */
  144. }TTDOMaterialBlock;
  145.  
  146. /*
  147. ** Material list structure
  148. */
  149. typedef struct {
  150.     ULONG                numberOfMaterials;        /* Number of materials in this list */
  151.     TTDOMaterialBlock    *blocks[Ci_MATBLOCKS];    /* Array of material blocks */
  152. }TTDOMaterialList;
  153.  
  154. /*
  155. ** Current Transformation Matrix
  156. */
  157. typedef struct {
  158.     TTDODouble sx,sy,sz;    // Scale, 1 = as it is
  159.     TTDODouble rx,ry,rz;    // Rotation in radian. 0 = no rotation. Needed to 
  160.                            // compute the ctm.m matrix.
  161.     TTDODouble m[4][4];        // Matrix containing the rotation and transformation
  162. }TTDOCTM;
  163.  
  164. /*
  165. ** Object structure
  166. */
  167. typedef struct {
  168.     STRPTR  name;                       /* The name of this  */
  169.     STRPTR  copyright;                    /* For the single lined copyright string */
  170.     
  171.     TTDOBBoxd    bBox;                    /* The bounding box    */
  172.     TTDOCamera    camera;                /* The camera            */
  173.     TTDOLight    light;                    /* The lightsource        */
  174.         
  175.     TTDOVertexList   vertices;          /* The list of vertices of this mesh    */
  176.     TTDOMaterialList materials;        /* The list of materials of this mesh    */
  177.  
  178.     TTDOPolygonNode    *curpoly;        /* Current polygon node to work with */
  179.  
  180.     TTDOCTM        ctm;                /* The current transformation marix of this mesh */
  181.  
  182.     APTR    vertexpool;                /* Header of the vertex memory pool of this mesh */
  183.     APTR    vertexarraypool;            /* Header of the vertex array pool of this mesh */
  184.     APTR    vertexblockspool;            /* Header of the vertex block pool of this mesh */
  185.     APTR    polyverpool;                /* Header of the polygon vertex list memory pool of this mesh */
  186.     APTR    polypool;                    /* Header of the polygon memory pool of this mesh */
  187.     APTR    polyarraypool;                /* Header of the polygon array pool of this mesh */
  188.     APTR    polyblockspool;            /* Header of the polygon block pool of this mesh */
  189.     APTR    matblockspool;                /* Header of the material block pool of this mesh */
  190.     APTR    partblockspool;            /* Header of the part block pool of this mesh */
  191. } TTDOMesh;
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198. /*
  199. ** Object node structure
  200. */
  201. typedef struct {
  202.     STRPTR name;            // The object its name
  203.  
  204.     TDvectord    s;            // Scale of the object
  205.     TDvectord    r;            // Rotation in radian. 0 = no rotation, of the object
  206.     TDvectord    o;            // Origin of the object.
  207.  
  208.     TDenum    type;            // Type of object
  209.     ULONG    handle;        // Handle to the object itself
  210. }TDobjectnode;
  211.  
  212. /*
  213. ** object block structure
  214. */
  215. typedef struct {
  216.     TDobjectnode *nodes[Ci_OBJECTNODESINBLOCK];    /* Array of object nodes */
  217. }TDobjectblock;
  218.  
  219. /*
  220. ** Object list structure
  221. */
  222. typedef struct {
  223.     ULONG            numberOfObjects;            /* Number of objects in this list */
  224.     TDobjectblock    *blocks[Ci_OBJECTBLOCKS];    /* Array of objects blocks */
  225. }TDobjectlist;
  226.  
  227. /*
  228. ** Vertex array structure
  229. */
  230. typedef struct {
  231.     TDvectord *varray[Ci_VERTEXARRAY];    /* Array of vertices */
  232. }TDvertexarray;
  233.  
  234. /*
  235. ** Vertex block structure
  236. */
  237. typedef struct {
  238.     TDvertexarray *barray[Ci_VERTEXARRAYINBLOCK];    /* Arrays of vertex arrays */
  239. }TDvertexblock;
  240.  
  241. /*
  242. ** Vertex list structure
  243. */
  244. typedef struct {
  245.     ULONG            numberOfVertices;            /* Number of vertices in this list    */
  246.     TDvertexblock    *blocks[Ci_VERTEXBLOCKS];    /* Array of vertex blocks.                */
  247. } TDvertexlist;
  248.  
  249. /*
  250. ** Polygon node structure
  251. */
  252. typedef struct {
  253.     ULONG numberOfVertices;        /* Number of vertices in this polygon */
  254.  
  255.     ULONG *varray;                    /* Vertex handle array */
  256. } TDpolygonnode;
  257.  
  258. /*
  259. ** Polygon array structure
  260. */
  261. typedef struct {
  262.     TDpolygonnode *parray[Ci_POLYARRAY];    /* Array of polygons */
  263. }TDpolygonarray;
  264.  
  265. /*
  266. ** Polygon block structure
  267. */
  268. typedef struct {
  269.     TDpolygonarray *barray[Ci_POLYARRAYINBLOCK];    /* Arrays of polygon arrays */
  270. }TDpolygonblock;
  271.  
  272. /*
  273. ** Polygon list structure
  274. */
  275. typedef struct {
  276.     ULONG                numberOfVertices;        /* Number of vertices in this list    */
  277.     ULONG                numberOfPolygons;        /* Number of polygons in this list    */
  278.     TDpolygonblock     *blocks[Ci_POLYBLOCKS];    /* Array of polygon blocks.            */
  279. } TDpolygonlist;
  280.  
  281. /*
  282. ** Surface structure
  283. */
  284. typedef struct {
  285.     TDcolorub ambientColor;            /* The material its ambient color */
  286.     TDcolorub diffuseColor;            /* The material its diffuse color */
  287.     TDfloat   shininess;                /* The material its shininess     */
  288.     TDfloat   transparency;            /* The material its transparency  */
  289. }TDsurface;
  290.  
  291. /*
  292. ** Texture structure
  293. */
  294. typedef struct {
  295. // achtung bei meshdelete namens pointer und so freigeben
  296. }TDtexture;
  297.  
  298. /*
  299. ** Material node structure
  300. */
  301. typedef struct {
  302.     STRPTR name;            // The material its name
  303.  
  304.     ULONG    index;            // Index of this material, used if node is out of array.
  305.  
  306.     TDenum    type;            // Type of material
  307.     ULONG    handle;        // Handle to the material itself
  308. }TDmaterialnode;
  309.  
  310. /*
  311. ** Material block structure
  312. */
  313. typedef struct {
  314.     TDmaterialnode *nodes[Ci_MATNODESINBLOCK];    /* Array of material nodes */
  315. }TDmaterialblock;
  316.  
  317. /*
  318. ** Material list structure
  319. */
  320. typedef struct {
  321.     ULONG                numberOfMaterials;        /* Number of materials in this list */
  322.     TDmaterialblock    *blocks[Ci_MATBLOCKS];    /* Array of material blocks */
  323. }TDmateriallist;
  324.  
  325. /*
  326. ** Matgroup node structure
  327. */
  328. typedef struct TDmatgroupnode {
  329.     TDpolygonlist    polygons;        /* Polygon list of this matgroup     */
  330.  
  331.     TDmaterialnode    *materialnode;    /* Node of the material of this group */
  332.     ULONG            texbindex;        /* Index of the texture binding */
  333. } TDmatgroupnode;
  334.  
  335. /*
  336. ** Matgroup block structure
  337. */
  338. typedef struct {
  339.     TDmatgroupnode *nodes[Ci_MATGROUPNODESINBLOCK];    /* Array of matgroup nodes */
  340. }TDmatgroupblock;
  341.  
  342. /*
  343. ** Matgroup list structure
  344. */
  345. typedef struct {
  346.     ULONG numberOfMatGroups;    /* Number of mat groupts in this list    */
  347.     ULONG numberOfPolygons;    /* Number of polygons in this list    */
  348.  
  349.     TDmatgroupblock    *blocks[Ci_MATGROUPBLOCKS];    /* Array of matgroup blocks*/
  350. } TDmatgrouplist;
  351.  
  352. /*
  353. ** Current Transformation Matrix
  354. */
  355. typedef struct {
  356.     TDdouble sx,sy,sz;        // Scale, 1 = as it is
  357.     TDdouble rx,ry,rz;        // Rotation in radian. 0 = no rotation. Needed to 
  358.                            // compute the ctm.m matrix.
  359.     TDdouble m[4][4];        // Matrix containing the rotation and transformation
  360. }TDctm;
  361.  
  362. /*
  363. ** Texture binding structure
  364. */
  365. typedef struct {
  366. } TDtexbinding;
  367.  
  368. /*
  369. ** Cube structure
  370. */
  371. typedef struct {
  372.     TDvectord size;                    /* Size coordinates of the cube */
  373. } TDcube;
  374.  
  375. /*
  376. ** Polymesh structure
  377. */
  378. typedef struct {
  379.     TDbboxd    bBox;                    /* The bounding box    */
  380.         
  381.     TDvertexlist   vertices;          /* The list of vertices of this mesh    */
  382.     TDmatgrouplist    matgroups;            /* The list of mat groups of this mesh      */ 
  383.  
  384.     TDpolygonnode    *curpolyn;            /* Current polygon node to work with */
  385.     TDmatgroupnode    *curmatgroupn;        /* Current matgroup node to work with    */
  386.  
  387.     APTR    vertexpool;                /* Header of the vertex memory pool of this mesh */
  388.     APTR    vertexarraypool;            /* Header of the vertex array pool of this mesh */
  389.     APTR    vertexblockspool;            /* Header of the vertex block pool of this mesh */
  390.     APTR    polyverpool;                /* Header of the polygon vertex list memory pool of this mesh */
  391.     APTR    polypool;                    /* Header of the polygon memory pool of this mesh */
  392.     APTR    polyarraypool;                /* Header of the polygon array pool of this mesh */
  393.     APTR    polyblockspool;            /* Header of the polygon block pool of this mesh */
  394.     APTR    matgroupblockspool;        /* Header of the matgroup block pool of this mesh */
  395. } TDpolymesh;
  396.  
  397. /*
  398. ** Space structure
  399. */
  400. typedef struct {
  401.     STRPTR  name;                       /* The name of this space */
  402.     
  403.     TDbboxd    bBox;                    /* The bounding box    */
  404.  
  405.     TDobjectlist objects;                /* The list of objects of this space    */
  406.     TDmateriallist materials;            /* The list of materials of this space    */
  407.  
  408.     TDctm        ctm;                    /* The current transformation matrix */
  409.  
  410.     TDmaterialnode    *curmatn;            /* The material to work with */
  411.     TDobjectnode    *curobjn;            /* The object to work with   */
  412.  
  413.     APTR    objectblockspool;            /* Header of the object block pool */
  414.     APTR    matblockspool;                /* Header of the material block pool */
  415. } TDspace;
  416.  
  417. /*
  418. ** 3d library information structure
  419. */
  420. typedef struct {
  421.     STRPTR    library;        /* Name of the 3d library, with extension    */
  422.     STRPTR    name;            /* Name of the format                        */
  423.     STRPTR    ext;            /* Extension of the format                    */
  424.     TDenum    *sups;            /* Supported save functions                */
  425.     TDenum    *supl;            /* Supported load functions                */    
  426. } TD3dlibinfo;
  427.  
  428. /*
  429. ** TD library information structure
  430. */
  431. typedef struct {
  432.     TD3dlibinfo    **lib3dinfos;    /* Array of 3d library informations structures */
  433. } TDlibraryinfo;
  434.  
  435. #endif
  436.  
  437. /************************* End of file ******************************/
  438.